Introducción a DCL
DCL (Data Control Language) es la parte de SQL encargada de controlar accesos y permisos dentro del SGBD.
La seguridad en bases de datos no depende solo del servidor o firewall. Gran parte de la protección se gestiona desde el propio motor SQL.
Objetivos de DCL
- Controlar quién accede.
- Limitar acciones.
- Proteger datos sensibles.
- Garantizar cumplimiento legal.
- Aplicar auditoría y trazabilidad.
Comandos principales
| Comando | Función |
|---|---|
| GRANT | Otorgar permisos |
| REVOKE | Retirar permisos |
| CREATE USER | Crear usuarios |
DCL: usuarios
Cada persona o aplicación accede a la base de datos mediante un usuario.
CREATE USER
CREATE USER 'juan'@'localhost'
IDENTIFIED BY '1234';
Explicación
- juan: nombre del usuario.
- localhost: host permitido.
- IDENTIFIED BY: contraseña.
Hosts comunes
| Host | Significado |
|---|---|
| localhost | Solo equipo local |
| % | Cualquier host |
DCL: roles
Un rol es un conjunto de permisos agrupados para simplificar la administración.
Ventajas de los roles
- Facilitan administración masiva.
- Reducen errores.
- Mejoran auditorías.
- Aumentan coherencia.
Crear rol
CREATE ROLE rol_medico;
Asignar permisos al rol
GRANT SELECT, INSERT
ON clinica.*
TO rol_medico;
Asignar rol a usuario
GRANT rol_medico
TO 'medico'@'%';
DCL: permisos
Los permisos definen acciones concretas permitidas para usuarios o roles.
Permisos habituales
| Permiso | Acción |
|---|---|
| SELECT | Leer datos |
| INSERT | Insertar filas |
| UPDATE | Modificar registros |
| DELETE | Eliminar filas |
| ALL PRIVILEGES | Control total |
Ejemplo
GRANT SELECT, INSERT
ON tienda.*
TO 'juan'@'localhost';
El usuario podrá consultar e insertar datos, pero no borrar ni modificar.
Gestión de la seguridad de una clínica privada
Las clínicas manejan datos extremadamente sensibles: historiales médicos, diagnósticos y tratamientos.
Perfiles de acceso
| Perfil | Permisos |
|---|---|
| Administrador | ALL PRIVILEGES |
| Médico | SELECT, INSERT |
| Recepción | SELECT |
Ejemplo médico
CREATE USER 'medico'@'%'
IDENTIFIED BY 'segura2025';
GRANT SELECT, INSERT
ON clinica.pacientes
TO 'medico'@'%';
Ejemplo recepción
CREATE USER 'recepcion'@'%'
IDENTIFIED BY 'recep2025';
GRANT SELECT
ON clinica.pacientes
TO 'recepcion'@'%';
Introducción a GRANT y REVOKE
GRANT
Otorga permisos a usuarios o roles.
GRANT privilegios
ON base.tabla
TO usuario;
REVOKE
Retira permisos existentes.
REVOKE privilegios
ON base.tabla
FROM usuario;
Lógica profesional
- Asignar.
- Verificar.
- Modificar.
- Retirar.
GRANT: otorgar permisos
Sintaxis general
GRANT privilegios
ON base.tabla
TO usuario;
Ejemplo práctico
GRANT SELECT, UPDATE
ON tienda.productos
TO 'ana'@'%';
Qué consigue
- Consultar productos.
- Modificar productos.
- No permite borrar.
GRANT ALL PRIVILEGES
GRANT ALL PRIVILEGES
ON tienda.*
TO 'admin'@'%';
REVOKE: retirar permisos
REVOKE elimina permisos previamente asignados.
Ejemplo
REVOKE UPDATE
ON tienda.productos
FROM 'ana'@'%';
Ana podrá seguir consultando productos, pero ya no modificarlos.
Eliminar todos los permisos
REVOKE ALL PRIVILEGES
ON academia.*
FROM 'profesor'@'%';
Cuándo usar REVOKE
- Cambio de puesto.
- Baja de empleados.
- Errores de permisos.
- Auditorías.
Ejemplos prácticos
Universidad: profesor
GRANT SELECT, UPDATE
ON academia.notas
TO 'profesor'@'%';
El profesor puede consultar y modificar notas.
Universidad: secretaría
GRANT SELECT
ON academia.alumnos
TO 'secretaria'@'%';
La secretaría consulta listados pero no modifica calificaciones.
Revisar permisos
SHOW GRANTS
FOR 'usuario'@'host';
Cambiar contraseña
ALTER USER 'usuario'@'host'
IDENTIFIED BY 'nuevaClave';
Buenas prácticas
- Revisiones periódicas.
- Documentar cambios.
- Evitar cuentas compartidas.
- Automatizar auditorías.
- Usar roles siempre que sea posible.